package edu.ualberta.med.biobank.views; import java.util.List; import java.util.Map; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.ISourceProviderListener; import org.eclipse.ui.part.ViewPart; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.gui.common.LoginPermissionSessionState; import edu.ualberta.med.biobank.gui.common.widgets.BgcBaseText; import edu.ualberta.med.biobank.utils.SearchType; public class SearchView extends ViewPart { public static final String ID = "edu.ualberta.med.biobank.views.SearchView"; //$NON-NLS-1$ private BgcBaseText searchText; private ComboViewer searchTypeCombo; private Button searchButton; protected boolean loggedIn; protected boolean allowed; private ISourceProviderListener sourceProviderListener; @Override public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(2, false)); // listen to login state sourceProviderListener = new ISourceProviderListener() { @Override public void sourceChanged(int sourcePriority, @SuppressWarnings("rawtypes") Map sourceValuesByName) { } @Override public void sourceChanged(int sourcePriority, String sourceName, Object sourceValue) { if (sourceName .equals(LoginPermissionSessionState.LOGIN_STATE_SOURCE_NAME)) { loggedIn = sourceValue.equals(LoginPermissionSessionState.LOGGED_IN); setEnabled(); } } }; BgcPlugin.getLoginStateSourceProvider().addSourceProviderListener( sourceProviderListener); allowed = true; // try { // TODO: not done // allowed = SessionManager.getAppService().isAllowed(new // SearchViewPermission(0, 0)); // } catch (ApplicationException e1) { // BgcPlugin.openAccessDeniedErrorMessage(e1); // allowed = false; // } searchTypeCombo = new ComboViewer(parent); searchTypeCombo.setContentProvider(new ArrayContentProvider()); searchTypeCombo.setInput(SearchType.values()); searchTypeCombo.getCombo().select(0); GridData gd = new GridData(); gd.horizontalSpan = 2; gd.horizontalAlignment = SWT.FILL; gd.grabExcessHorizontalSpace = true; searchTypeCombo.getCombo().setLayoutData(gd); searchText = new BgcBaseText(parent, SWT.NONE); gd = new GridData(); gd.horizontalAlignment = SWT.FILL; gd.grabExcessHorizontalSpace = true; searchText.setLayoutData(gd); searchText.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (e.character == SWT.CR) { search(); } } }); searchButton = new Button(parent, SWT.PUSH); searchButton.setText(Messages.SearchView_search_label); searchButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { search(); } }); loggedIn = BgcPlugin.getLoginStateSourceProvider().getCurrentState() .get(LoginPermissionSessionState.LOGIN_STATE_SOURCE_NAME) .equals(LoginPermissionSessionState.LOGGED_IN); setEnabled(); } @Override public void setFocus() { searchTypeCombo.getCombo().setFocus(); } @Override public void dispose() { if (sourceProviderListener != null) BgcPlugin.getLoginStateSourceProvider() .removeSourceProviderListener(sourceProviderListener); super.dispose(); } private void search() { BusyIndicator.showWhile(Display.getDefault(), new Runnable() { @Override public void run() { String searchString = searchText.getText().trim(); SearchType type = (SearchType) ((IStructuredSelection) searchTypeCombo .getSelection()).getFirstElement(); try { List<ModelWrapper<?>> res = type.search( searchString, SessionManager.getUser() .getCurrentWorkingCenter()); if (res != null && res.size() > 0) { type.processResults(res); } else { BgcPlugin.openInformation( Messages.SearchView_noresult_dialog_title, Messages.SearchView_noresult__dialog_msg); } } catch (Exception ex) { BgcPlugin.openAsyncError( Messages.SearchView_search_error_title, ex); } } }); } public void setEnabled() { if (!searchText.isDisposed()) { searchText.setEnabled(loggedIn && allowed); searchTypeCombo.getCombo().setEnabled(loggedIn); searchButton.setEnabled(loggedIn); } } }